/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package be.ulb.f203.projet.tools;

import be.ulb.f203.projet.metier.Graphe;
import be.ulb.f203.projet.metier.Noeud;
import java.io.File;
import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.List;

/**
 *
 * @author Lam
 */
public class ParsingTools {

    /**
     * Crée un graphe à partir d'un fichier texte repectant le format suivant.
     * <ul> <li>La première ligne indique le nombre de noeuds du graphe</li>
     * <li>nom de chaque noeud (une chaîne de caractères alphanumériques
     * uniquement), suivi d’un retour à la ligne </li> <li>d’une liste de
     * triplets “NoeudDeDépart NoeudDArrivée Temps” représentant chaque arc du
     * graphe. Chaque noeud est identifié par son nom et le temps est un réel
     * (en minutes). </li> </ul>
     *
     * @param file Fichier qui va être parser.
     * @return Le graphe correspondant à la description du faite dans le
     * fichier.
     */
    public static Graphe parseFromFile(File file) throws IOException,NumberFormatException  {
        List<String> fichier = null;
        int nbNoeuds = 0;
        if (file == null) {
            throw new IllegalArgumentException("Fichier non spécifié");
        }
        fichier = Files.readAllLines(Paths.get(file.getAbsolutePath()), StandardCharsets.UTF_8);
        
        nbNoeuds = Integer.parseInt(fichier.get(0));
        Graphe graphe = new Graphe();
        for (int i = 1; i <= nbNoeuds; i++) {
            graphe.ajouterNoeud(new Noeud(fichier.get(i)));
        }
        for (int i = nbNoeuds + 1; i < fichier.size(); i++) {
            String[] tab = fichier.get(i).split(" ");
            graphe.creerArc(tab[0], tab[1], Double.valueOf(tab[2]));
        }
        return graphe;
    }
}
